import allure

from common.apinew import ApiNew
from common.AssertUtil import AsserUtil
from common.ExtractUtil import ExtractUtil
class ApiServer:
    def __init__(self):
        self.session =ApiNew()
        self.assertutil = AsserUtil()
        self.extract = ExtractUtil()
    def handle_case(self,test_data,login_token=None):
        #获取uri,如果uri中带来${}则要处理uri
        uri = self.extract.extract_url(test_data["request_info"]["uri"])
        #获取method
        method = test_data["request_info"]["method"]
        #获取headers
        headers = test_data["request_info"]["headers"]
        if login_token:
            headers.update(login_token)

        #获取case_info
        case_info = test_data["case_info"]
        #移除validate和case_title，case_info内容剩下json，同时将移除的内容赋值给validate
        # value = dictionary.pop(key, default)
        # default是一个可选参数，当指定的key不存在于字典中时，如果提供了default参数，则返回该默认值；如果没有提供default参数且key不存在，那么将会抛出KeyError异常。
        # 并且value将会接收到被移除项的值。
        vilidate = case_info.pop("validate",None)
        allure_title = case_info.pop("case_title",None)
        # 给allure报告定义用例标题
        allure.dynamic.title(allure_title)

        # 获取extract
        extract = case_info.pop("extract", None)
        # print(case_info)
        #json等参数中有${}
        case_info = self.extract.extract_case(case_info)
        #发送请求
        res = self.session.request(uri=uri,method=method,headers=headers,**case_info)
        # 将extract值写入extract.yaml
        self.extract.extract_data(res,extract)
        #断言
        if vilidate:
            self.assertutil.validate_response(res, vilidate)
        return res

